package tt.dz.appserver.util.annotation;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * 数据库注解帮助类
 * 
 * @author 谢龙飞
 * 
 */
public final class AnnotationUtils {

	/**
	 * 获取实体映射的表名称
	 * 
	 * @param cls
	 * @return
	 */
	public final static String getEntityTableMappingByAnnotationName(Class<?> cls) {
		// 得到注解
		Table table = cls.getAnnotation(Table.class);

		// 返回注解值
		if (table != null) {
			return table.name();
		} else {
			return cls.getSimpleName().toLowerCase();
		}
	}
	
	/**
	 * 获取实体映射的表名称
	 * 
	 * @param cls
	 * @return
	 */
	public final static String getJsonMapping(Field field) {
		// 得到注解
		JsonMapping jsonMapping = field.getAnnotation(JsonMapping.class);

		// 返回注解值
		if (jsonMapping != null && !"".equals(jsonMapping.name())) {
			return jsonMapping.name();
		} else {
			return field.getName();
		}
	}

	/**
	 * 获取实体映射的表名称
	 * 
	 * @param cls
	 * @return
	 */
	public final static boolean entityNeedReferenceQuery(Class<?> cls) {
		// 得到注解
		Table table = cls.getAnnotation(Table.class);
		// 返回注解值
		return table == null ? false : table.referenceQuery();
	}

	/**
	 * 是否为主键
	 * 
	 * @param field
	 * @return
	 */
	public static final boolean fieldIsPrimarkey(Field field) {

		// 得到注解
		PrimaryKey primaryKey = field.getAnnotation(PrimaryKey.class);
		// 返回注解值
		return primaryKey == null ? false : true;
	}

	/**
	 * 方法是否需要拦截
	 * 
	 * @param method
	 *            方法
	 * @return
	 */
	public static final boolean needValidateToken(Method method) {

		// 获取验证注解
		TokenValidate tokenValidate = method.getAnnotation(TokenValidate.class);
		// 返回注解结果
		return tokenValidate == null ? false : true;
	}

	/**
	 * 是否跳过映射
	 * 
	 * @param method
	 *            方法
	 * @return
	 */
	public static final boolean ignore(Field field) {

		// 获取验证注解
		Ignore ignore = field.getAnnotation(Ignore.class);
		// 返回注解结果
		return ignore == null ? false : true;
	}

	/**
	 * 是否映射此属性
	 * 
	 * @param method
	 *            方法
	 * @return
	 */
	public static final boolean isMapping(Field field) {

		// 获取验证注解
		Ignore ignore = field.getAnnotation(Ignore.class);
		// 返回注解结果
		return ignore == null ? false : true;
	}

}
